|
Date :................................... 4 mai 1990 Programme : .............ALS VIEW V3.10 Protection : .......................Clef physique Fichier : ...............................ALSV.EXE Outils : .......PERISCOPE, Carte PANO Temps passé :......................... Pas mal... Société :................................................ Divers :.... PERISCOPE chargé à 1700h Origine : ..............................................? Numéro : ....................................019bis |
On arrive assez facilement à déterminer l'endroit ou le programme affiche le message " clef physique absente" et d'infléchir le soft avant, mais il se plante un peu plus loin. Modification du saut pour contourner l'affichage du message et ne pas sortir du programme: Dans la chaine suivante, adresse 2699:09FE avec PERISCOPE chargé à 1700:0000 il faut remplacer 74 par 75. 7418 9A(50790A36) ----> ceci est un branchement FAR on ne trouve donc B83000 pas ces valeurs là. 2D5301 A35824 Peu après le soft se plante sur chaque instruction ES:MOV [DI],AL car ES ayant été mal initialisé pointe sur 0000; on écrit donc dans la table des INT. Par ailleurs le soft tourne en supprimant ces instructions à deux exeptions près ( qui rendent le produit inutilisable ) il s'agit d'une part de l'impossibilité de charger et sauver un fichier de travail ( dans le sous menu Quit ), les chargements et sauvegardes fonctionnent dans les autres menus. D'autre part le soft "fonctionne" si l'on a chargé PERISCOPE auparavant et que l'on fait un NMI BREAK dans la zone cité plus haut, le soft se plante s'il est lancé d'un seul coup! ( aucune idée la dessus pour l'instant ). ES est chargé à l'adresse 0A22 par LES AX,[0DDF] ; une instruction du type MOVE un peu spéciale. Dans ce cas le contenu de 0DDF n'est pas CS:0DDF mais DS:0DDF. La portion de code ci-dessous existe également à l'adresse 072F et apparement n'est pas utilisée. _____________________________________________________ 2699:0E66 26 ES: 2699:0E67 8805 MOV [DI],AL 2699:0E69 C70641240D00 MOV WORD PTR [2441],000D 2699:0E6F A05324 MOV AL,[2453] 2699:0E72 C43E4124 LES DI,[2441] _____________________________________________________ 2699:0E76 26 ES: 2699:0E77 8805 MOV [DI],AL 2699:0E79 31C0 XOR AX,AX 2699:0E7B A34324 MOV [2443],AX 2699:0E7E C70641246C04 MOV WORD PTR [2441],046C 2699:0E84 C43E4124 LES DI,[2441] 2699:0E88 26 ES: 2699:0E89 8A05 MOV AL,[DI] 2699:0E8B A25424 MOV [2454],AL 2699:0E8E C70641240700 MOV WORD PTR [2441],0007 2699:0E94 A05424 MOV AL,[2454] 2699:0E97 C43E4124 LES DI,[2441] _____________________________________________________ 2699:0E9B 26 ES: 2699:0E9C 8805 MOV [DI],AL 2699:0E9E C70641240E00 MOV WORD PTR [2441],000E 2699:0EA4 A05424 MOV AL,[2454] 2699:0EA7 C43E4124 LES DI,[2441] _____________________________________________________ 2699:0EAB 26 ES: 2699:0EAC 8805 MOV [DI],AL 2699:0EAE C70641246C04 MOV WORD PTR [2441],046C 2699:0EB4 C43E4124 LES DI,[2441] 2699:0EB8 26 ES: 2699:0EB9 8A05 MOV AL,[DI] 2699:0EBB A25424 MOV [2454],AL 2699:0EBE C70641240600 MOV WORD PTR [2441],0006 2699:0EC4 A05424 MOV AL,[2454] 2699:0EC7 C43E4124 LES DI,[2441] _____________________________________________________ 2699:0ECB 26 ES: 2699:0ECC 8805 MOV [DI],AL 2699:0ECE C70641240D00 MOV WORD PTR [2441],000D 2699:0ED4 A05424 MOV AL,[2454] 2699:0ED7 C43E4124 LES DI,[2441] _____________________________________________________ 2699:0EDB 26 ES: 2699:0EDC 8805 MOV [DI],AL 2699:0EDE C70641240500 MOV WORD PTR [2441],0005 2699:0EE4 C43E4124 LES DI,[2441] _____________________________________________________ 2699:0EE8 26 ES: 2699:0EE9 C60502 MOV BYTE PTR [DI],02 Les entrées sorties de la clef physique se font par le CALL 02F9. Une chose curieuse; après l'instruction IN AL,378h le contenu du registre AL est ANDer avec 40h ce qui signifie que l'on ne test qu'un seul bit ( le 7eme ). Ceci est confirmé par l'examen physique de la clef qui a été livré avec le logiciel EED3. Voir schéma de la clef. Par contre là ou le bat blesse c'est qu'apparement ce bit n'est testé nul part. J'ai examiné toutes les instructions du CALL 2F9 une par une, j'ai vérifié tout les flags pouvant être actionnés sans résultat... Il reste la dernière solution c'est de prendre la portion de code et de la "donner" à TVC286 pour voir. 360A:02F9 CALL 2F9 JNZ 016E INC BL CALL 2F9 JZ 016E XOR AX,AX PUSH AX JMP 01AF Avec la carte PANO, PERISCOPE s'affiche en pointant sur l'adresse spécifiée sur les RC; Ceci est le contenu du CALL 02F9 AX=0040 BX=0000 CX=0100 DX=0378 SP=0D8C BP=0D9A SI=0378 DI=0005 DS=360A ES=0000 SS=45B2 CS=360A IP=02F9 NV UP EI PL ZR NA PE NC WR SS:0D8A = 1700 360A:02F9 E870FF CALL 026C 360A:02FC 51 PUSH CX 360A:02FD B90A00 MOV CX,000A 360A:0300 0ADB OR BL,BL 360A:0302 7505 JNZ 0309 360A:0304 E819FF CALL 0220 360A:0307 EB03 JMP 030C 360A:0309 E891FF CALL 029D 360A:030C E84FFF CALL 025E 360A:030F 7402 JZ 0313 360A:0311 E2ED LOOP 0300 360A:0313 59 POP CX 360A:0314 C3 RET Le CALL 026C fait les sorties sur la Clef, le CALL 0264 sert de tempo. 360A:026C 32E4 XOR AH,AH 360A:026E 8AC4 MOV AL,AH 360A:0270 EB00 JMP 0272 360A:0272 EE OUT DX,AL 360A:0273 8AC4 MOV AL,AH 360A:0275 EB00 JMP 0277 360A:0277 EE OUT DX,AL 360A:0278 E8E9FF CALL 0264 360A:027B E8E6FF CALL 0264 360A:027E B43F MOV AH,3F ; '?' 360A:0280 8AC4 MOV AL,AH 360A:0282 EB00 JMP 0284 il y a des choses curieuses comme ce saut ! 360A:0284 EE OUT DX,AL 360A:0285 8AC4 MOV AL,AH 360A:0287 EB00 JMP 0289 360A:0289 EE OUT DX,AL 360A:028A E8D7FF CALL 0264 CALL 0264 ( temporisation ); 360A:0264 51 PUSH CX 360A:0265 B94000 MOV CX,0040 360A:0268 E2FE LOOP 0268 360A:026A 59 POP CX 360A:026B C3 RET Le CALL 025E lis la clef en faisant un ET avec le bit 7; 360A:025E 42 INC DX 360A:025F EC IN AL,DX 360A:0260 4A DEC DX 360A:0261 2440 AND AL,40 ; '@' 360A:0263 C3 RET FREDDY